import tornado.web
import asyncio
import json, time

class BaseTornadoRequestHandler(tornado.web.RequestHandler):
    def initialize(self, **kwargs):
        # 从 Application 中获取共享的状态
        self.task_list = self.application.settings.get('task_list', [])

    def prepare(self):
        # 设置 CORS 头部，允许来自任何域的请求
        self.set_header("Access-Control-Allow-Origin", "*")
        self.set_header("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
        self.set_header("Access-Control-Allow-Headers", "Content-Type, Authorization")
        
        # 如果是预检请求（OPTIONS 请求），直接返回
        if self.request.method == "OPTIONS":
            self.set_status(204)
            self.finish()
        
    async def stop_all_task(self):
        """ 停止所有运行中的任务 """
        print(f"正在停止所有任务，当前任务列表：{self.task_list}")
        if len(self.task_list):
            for task in self.task_list:
                try:
                    task.cancel()  # 取消任务
                    await task  # 等待任务停止
                except asyncio.CancelledError:
                    pass  # 任务被取消时，不需要处理异常
        self.task_list.clear()  # 清空任务列表
        
    def return_json(self, data=None, code=200, status=True, message="success"):
        
        response_data = {
            "data": data,
            "status": status,
            "message": message,
            "code": code,
            "timestamp": int(time.time() * 1000)
        }
        # 设置响应头为 application/json
        self.set_header("Content-Type", "application/json")
        
        # 返回 JSON 数据
        self.write(json.dumps(response_data))